Wednesday, January 07, 2009

The evolution of the programmer...

A little story/joke I tell my students to explain the good and bad motivation they will face and to teach them where to look first:


There is a term in Russian programming culture called the "programmer laziness" (программистская лень) and it is a good thing, if one knows how to control it, that is.

In general, it is exhibited by spending hours to automate the solving of a problem that would otherwise take five minutes to fix by hand. When this problem arises again most programmers will again dig in for hours but, some more advanced people will remember that they've already did it, will blow the dust off their old code, adjust it and run it again spending less time than it took to code in the first place but, still substantially more than it would take to do the work by hand. In turn, most of these people will repeat the process again and again every time they face the task, evolving their code. But, a fraction will notice a routine and write a problem detector virtually eliminating the time spent on even considering the task (effectively, again, taking them to a new level of abstraction) only until a sufficiently different problem is encountered and then the process needs to be repeated from the start. And so on.

That was the first evolutionary level.

People who either have evolved to the second level or were born into it will say: "Oh! now, I'm seeing this too often, I wonder what is causing it?" as soon as they see an error for the second time at max.